#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from PySide6.QtWidgets import (
    QDialog, QVBoxLayout, QHBoxLayout, QLabel, 
    QPushButton, QFrame, QTabWidget, QWidget,
    QCalendarWidget, QTableWidget, QTableWidgetItem,
    QHeaderView, QSplitter
)
from PySide6.QtGui import QFont, QIcon, QColor
from PySide6.QtCore import Qt, QDate, QSize
from datetime import datetime, date, timedelta

class StatsDialog(QDialog):
    """统计对话框"""
    
    def __init__(self, db_manager, parent=None):
        """初始化统计对话框
        
        Args:
            db_manager: 数据库管理器实例
            parent: 父窗口
        """
        super().__init__(parent)
        
        self.db_manager = db_manager
        
        # 设置窗口属性
        self.setWindowTitle("统计")
        self.setWindowIcon(QIcon("app/resources/icons/bunny.png"))
        self.setMinimumSize(700, 500)
        
        # 创建UI组件
        self._create_ui()
        
        # 加载今日数据
        self._load_today_stats()
    
    def _create_ui(self):
        """创建UI组件"""
        # 创建主布局
        main_layout = QVBoxLayout(self)
        main_layout.setContentsMargins(20, 20, 20, 20)
        main_layout.setSpacing(15)
        
        # 创建标签页
        tab_widget = QTabWidget()
        
        # 创建日统计页
        daily_tab = QWidget()
        tab_widget.addTab(daily_tab, "日统计")
        
        # 创建周统计页
        weekly_tab = QWidget()
        tab_widget.addTab(weekly_tab, "周统计")
        
        # 创建月统计页
        monthly_tab = QWidget()
        tab_widget.addTab(monthly_tab, "月统计")
        
        # 添加标签页到主布局
        main_layout.addWidget(tab_widget)
        
        # 创建日统计
        self._create_daily_stats(daily_tab)
        
        # 创建周统计
        self._create_weekly_stats(weekly_tab)
        
        # 创建月统计
        self._create_monthly_stats(monthly_tab)
        
        # 创建按钮布局
        button_layout = QHBoxLayout()
        button_layout.setSpacing(10)
        
        # 创建关闭按钮
        self.close_button = QPushButton("关闭")
        self.close_button.setMinimumHeight(40)
        self.close_button.clicked.connect(self.accept)
        button_layout.addWidget(self.close_button)
        
        main_layout.addLayout(button_layout)
    
    def _create_daily_stats(self, parent):
        """创建日统计
        
        Args:
            parent: 父窗口
        """
        layout = QVBoxLayout(parent)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setSpacing(15)
        
        # 创建分割器
        splitter = QSplitter(Qt.Horizontal)
        
        # 创建日历部件
        self.calendar = QCalendarWidget()
        self.calendar.setMinimumWidth(300)
        self.calendar.setMaximumDate(QDate.currentDate())
        self.calendar.clicked.connect(self._on_date_selected)
        splitter.addWidget(self.calendar)
        
        # 创建统计部件
        stats_widget = QWidget()
        stats_layout = QVBoxLayout(stats_widget)
        stats_layout.setContentsMargins(20, 20, 20, 20)
        stats_layout.setSpacing(15)
        
        # 创建日期标签
        self.date_label = QLabel("今日统计")
        font = QFont()
        font.setPointSize(16)
        font.setBold(True)
        self.date_label.setFont(font)
        stats_layout.addWidget(self.date_label)
        
        # 创建分隔线
        line = QFrame()
        line.setFrameShape(QFrame.HLine)
        line.setFrameShadow(QFrame.Sunken)
        stats_layout.addWidget(line)
        
        # 创建统计信息
        self.work_time_label = QLabel("工作时间: 0小时0分钟")
        self.break_time_label = QLabel("休息时间: 0小时0分钟")
        self.pomodoros_label = QLabel("完成番茄: 0")
        self.flowdoros_label = QLabel("完成Flowdoro: 0")
        self.longest_session_label = QLabel("最长工作: 0小时0分钟")
        
        font = QFont()
        font.setPointSize(12)
        self.work_time_label.setFont(font)
        self.break_time_label.setFont(font)
        self.pomodoros_label.setFont(font)
        self.flowdoros_label.setFont(font)
        self.longest_session_label.setFont(font)
        
        stats_layout.addWidget(self.work_time_label)
        stats_layout.addWidget(self.break_time_label)
        stats_layout.addWidget(self.pomodoros_label)
        stats_layout.addWidget(self.flowdoros_label)
        stats_layout.addWidget(self.longest_session_label)
        
        # 添加弹性空间
        stats_layout.addStretch()
        
        splitter.addWidget(stats_widget)
        
        # 设置分割器初始大小
        splitter.setSizes([300, 400])
        
        layout.addWidget(splitter)
    
    def _create_weekly_stats(self, parent):
        """创建周统计
        
        Args:
            parent: 父窗口
        """
        layout = QVBoxLayout(parent)
        layout.setContentsMargins(20, 20, 20, 20)
        layout.setSpacing(15)
        
        # 创建标题标签
        title_label = QLabel("本周统计")
        font = QFont()
        font.setPointSize(16)
        font.setBold(True)
        title_label.setFont(font)
        layout.addWidget(title_label)
        
        # 创建分隔线
        line = QFrame()
        line.setFrameShape(QFrame.HLine)
        line.setFrameShadow(QFrame.Sunken)
        layout.addWidget(line)
        
        # 创建表格
        self.weekly_table = QTableWidget()
        self.weekly_table.setColumnCount(5)
        self.weekly_table.setHorizontalHeaderLabels([
            "日期", "工作时间", "休息时间", "完成番茄", "完成Flowdoro"
        ])
        self.weekly_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
        layout.addWidget(self.weekly_table)
        
        # 创建总计标签
        self.weekly_total_label = QLabel("本周总计: 工作0小时0分钟, 休息0小时0分钟, 完成番茄0个, 完成Flowdoro0个")
        font = QFont()
        font.setPointSize(12)
        self.weekly_total_label.setFont(font)
        layout.addWidget(self.weekly_total_label)
        
        # 加载本周数据
        self._load_weekly_stats()
    
    def _create_monthly_stats(self, parent):
        """创建月统计
        
        Args:
            parent: 父窗口
        """
        layout = QVBoxLayout(parent)
        layout.setContentsMargins(20, 20, 20, 20)
        layout.setSpacing(15)
        
        # 创建标题标签
        title_label = QLabel("本月统计")
        font = QFont()
        font.setPointSize(16)
        font.setBold(True)
        title_label.setFont(font)
        layout.addWidget(title_label)
        
        # 创建分隔线
        line = QFrame()
        line.setFrameShape(QFrame.HLine)
        line.setFrameShadow(QFrame.Sunken)
        layout.addWidget(line)
        
        # 创建表格
        self.monthly_table = QTableWidget()
        self.monthly_table.setColumnCount(5)
        self.monthly_table.setHorizontalHeaderLabels([
            "日期", "工作时间", "休息时间", "完成番茄", "完成Flowdoro"
        ])
        self.monthly_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
        layout.addWidget(self.monthly_table)
        
        # 创建总计标签
        self.monthly_total_label = QLabel("本月总计: 工作0小时0分钟, 休息0小时0分钟, 完成番茄0个, 完成Flowdoro0个")
        font = QFont()
        font.setPointSize(12)
        self.monthly_total_label.setFont(font)
        layout.addWidget(self.monthly_total_label)
        
        # 加载本月数据
        self._load_monthly_stats()
    
    def _load_today_stats(self):
        """加载今日统计数据"""
        # 获取今日统计
        stats = self.db_manager.get_today_stats()
        
        # 更新日期标签
        today = date.today()
        self.date_label.setText(f"{today.year}年{today.month}月{today.day}日 统计")
        
        # 更新统计信息
        self._update_stats_labels(stats)
    
    def _load_date_stats(self, selected_date):
        """加载指定日期的统计数据
        
        Args:
            selected_date: 选定的日期
        """
        # 这里需要实现从数据库加载指定日期的统计数据
        # 为简化实现，这里暂不实现
        pass
    
    def _load_weekly_stats(self):
        """加载本周统计数据"""
        # 这里需要实现从数据库加载本周的统计数据
        # 为简化实现，这里暂不实现
        pass
    
    def _load_monthly_stats(self):
        """加载本月统计数据"""
        # 这里需要实现从数据库加载本月的统计数据
        # 为简化实现，这里暂不实现
        pass
    
    def _update_stats_labels(self, stats):
        """更新统计标签
        
        Args:
            stats: 统计数据字典
        """
        # 计算工作时间
        total_work_minutes = stats['total_work_seconds'] // 60
        work_hours = total_work_minutes // 60
        work_minutes = total_work_minutes % 60
        
        # 计算休息时间
        total_break_minutes = stats['total_break_seconds'] // 60
        break_hours = total_break_minutes // 60
        break_minutes = total_break_minutes % 60
        
        # 计算最长工作时间
        longest_minutes = stats['longest_work_session'] // 60
        longest_hours = longest_minutes // 60
        longest_minutes = longest_minutes % 60
        
        # 更新标签
        self.work_time_label.setText(f"工作时间: {work_hours}小时{work_minutes}分钟")
        self.break_time_label.setText(f"休息时间: {break_hours}小时{break_minutes}分钟")
        self.pomodoros_label.setText(f"完成番茄: {stats['completed_pomodoros']}")
        self.flowdoros_label.setText(f"完成Flowdoro: {stats['completed_flowdoros']}")
        self.longest_session_label.setText(f"最长工作: {longest_hours}小时{longest_minutes}分钟")
    
    def _on_date_selected(self, date):
        """日期选择事件处理
        
        Args:
            date: 选定的日期
        """
        # 更新日期标签
        self.date_label.setText(f"{date.year()}年{date.month()}月{date.day()}日 统计")
        
        # 加载选定日期的统计数据
        selected_date = date.toPython()
        self._load_date_stats(selected_date)